Section 1 - Révision et comparaisons
Retour à la page du cours
Cette section se veut une révision de la dernière section du cours de Systèmes d'exploitation 2 (Linux). Ces notions sont importantes pour la suite du cours.
Vous êtes donc invités à relire cette section en parallèle avec celle-ci. En même temps, nous comparerons brièvement les distribution Ubuntu et Fedora.
1.1 - La structure de démarrage
1.2 - KDE vs Gnome
1.1 - La structure de démarrage
1.1.1 - La structure de démarrage à la sauce SysVinit
- Le processus init démarre
- Il va lire /etc/inittab pour obtenir la séquence de démarrage
- Le contenu de ce fichier va déterminer:
- le niveau d'exécution (runlevel) à utiliser par défaut
- l'ordre des processus à démarrer pour ce niveau
- la façon de les démarrer (une fois, en mode respawn (redémarrage automatique à la mort du processus), etc)
- quoi faire lorsqu'un usager appuie sur Ctrl-Alt-Del
- Si on n'a jamais touché à /etc/inittab, voici ce qui se passe par défaut:
- Le script /etc/rc.d/rc.sysinit est lancé d'abord, ce qui initialise le système de façon générale
- Le script /etc/rc.d/rc est lancé, avec en paramètre le numéro du runlevel désiré (normalement 5, parfois 3).
Ce script va donc entrer dans /etc/rc.d/rcX.d (ou X est le numéro du runlevel) et exécuter tout ce qui s'y trouve, dans l'ordre. Ce qu'on trouve là, ce sont des liens symboliques (donc des raccourcis) qui pointent vers les scripts de /etc/rc.d/init.d
- Les raccourcis qui commencent par K sont suivis d'abord, dans l'ordre du numéro à deux chiffres qui suit la lettre K dans le nom. Chacun des scripts de /etc/rc.d/init.d ainsi lancé le sera avec le paramètre stop.
- Les raccourcis qui commencent par S seront suivis ensuite, afin de démarrer les scripts correspondant avec le paramètre start.
- Une fois certains services arrêtés et certains autres démarrés, on est officiellement dans le runlevel voulu.
- Dans le cas des runlevels 2 à 5 (qui mènent à une utilisation "normale" du système), le dernier raccourci est S99local, qui pointe vers /etc/rc.d/rc.local, un fichier vide au départ mais auquel l'administrateur peut ajouter des commandes à exécuter au démarrage
- Le programme /sbin/mingetty est ensuite lancé 6 fois pour créer les 6 consoles virtuelles permettant à l'usager de se loguer physiquement au serveur
Pour modifier la séquence de démarrage, on peut utiliser chkconfig de 4 façons différentes:
- Appelée avec l'option --list, elle affiche tous les services qu'elle connaît et leur état pour chaque niveau d'exécution. (Notez qu'elle affiche également en bonus la liste des services contrôlés par xinetd et leur statut). On peut lui passer un nom de service pour restreindre la liste.
- Appelée avec le nom d'un service suivi de on, le service est ajouté aux niveaux d'exécution 2, 3, 4 et 5 (l'option --level permet de contourner ce comportement par défaut et de spécifier un (ou des) niveau(x) voulu(s)).
- La même chose peut se faire avec le nom d'un service suivi de off.
- On peut également faire la même chose avec le nom d'un service suivi de reset. Dans ce cas, le comportement par défaut du service sera rétabli dans tous les niveaux d'exécution (à moins que l'option --level en spécifie autrement).
Remarquez qu'il n'existe aucun paramètre pour spécifier la priorité de démarrage du service. chkconfig semble en connaître une pour chaque service. En fait, il y a un truc: chkconfig va chercher des valeurs dans l'entête du script approprié dans /etc/rc.d/init.d. En effet, une ligne de commentaire doit s'y trouver et avoir le format suivant:
# chkconfig: niveaux start stop
Par exemple:
signifie que ce service doit démarrer dans les niveaux 2 à 5 en priorité 80 et être arrêté en priorité 20. Un – à la place des niveaux signifie que le service ne démarre dans aucun niveau par défaut.
Plus de détails dans man chkconfig si nécessaire.
On peut également utiliser ntsysv, un outil pseudo-graphique qui est sans doute plus simple à utiliser. Par défaut, ntsysv modifie le niveau d'exécution en cours. ntsysv --level X (ou X est un numéro de niveau d'exécution) permet de modifier la séquence d'un autre niveau.
On peut bien entendu utiliser un outil graphique si on y a accès (l'outil serviceconf est intéressant)... Ou encore modifier les liens de /etc/rc.d/init.d à la main, ce qui est parfois délicat.
Nous n'avions pas vu officiellement sysvinit dans le cadre du cours, mais nous avions brièvement parlé des différences qu'il présentait par rapport à upstart.
Retour à la table des matières de la section
1.1.2 - La séquence de démarrage à la sauce upstart
Les différences avec sysvinit ne sont pas très grandes:
- Le fichier /etc/inittab n'existe plus et est remplacé par le répertoire /etc/init. Ce répertoire contient plusieurs fichiers, chacun d'entre eux représentant une job. Chaque job sera démarrée lorsqu'un certain événement sera lancé, puis possiblement arrêtée lorsqu'un autre événement sera déclenché. init chargera donc toutes les jobs en mémoire et chacune d'entre elle attendra le bon événement. On peut voir les jobs présentement en mémoire et leur statut en faisant initctl list.
- Une des jobs est rcS et elle remplace le script /etc/rc.d/rc.sysinit. Cette job est démarrée dès l'amorçage de la machine, avant même d'entrer dans un runlevel particulier et initialise le serveur. Cette initialisation se fait en exécutant /etc/init.d/rcS, qui lui même va dans /etc/rcS.d suivre des raccourcis pointant sur /etc/init.d, comme pour l'entrée dans un runlevel.
- Une autre job est rc-default. Elle démarre après rcS et amène le système au runlevel voulu par défaut.
- Une fois dans un runlevel, c'est une des jobs rc0 à rc6 qui sera exécutée et qui appellera /etc/init.d/rc. Le principe est le même ici que pour sysvinit.
- D'autres jobs démarreront les tty (consoles virtuelles) - ce qui remplace les appels à mingetty.
Les autres différences sont simplement des fichiers ou répertoires qui ont changé de place:
- Le script rc se trouve dans /etc/init.d plutôt que dans /etc/rc.d.
- Le script rc.local se trouve directement dans /etc plutôt que dans /etc/rc.d
- Les répertoires rcX.d contenant les liens se trouvent tous dans /etc/ plutôt que dans /etc/rc.d
- Les scripts de démarrage et d'arrêt de services se trouvent dans /etc/init.d plutôt que dans /etc/rc.d/init.d
Pour modifier la séquence de démarrage, on peut utiliser sysv-rc-conf, un outil pseudo-graphique.
Retour à la table des matières de la section
1.1.3 - Que fait Fedora?
Fedora 9 utilise maintenant upstart, mais conserve également en arrière-plan la structure de SysVinit... C'est un grand pas en avant pour la ligne Fedora/RedHat.
Concrètement:
- Toute la structure de répertoires de sysvinit (/etc/rc.d) est conservée telle quelle, avec le même contenu.
- Toute la structure de répertoires de upstart (directement dans /etc) est créée avec des liens symboliques qui pointent vers les répertoires et fichiers correspondants de /etc/rc.d.
- La job rcS (d'upstart) existe, mais appelle rc.sysinit (de sysvinit).
- Le fichier /etc/inittab (de sysvinit) existe encore, mais la seule ligne qui y a été laissée est la ligne qui définit le runlevel par défaut. Toute autre ligne qu'on y ajoute sera carrément ignorée. Ce fichier remplace la job /etc/init/rc-default (à la upstart).
- Les jobs tty existent (à la upstart) mais elles appellent /sbin/mingetty (à la sysvinit).
- Les outils chkconfig et ntsysv sont présents mais pas sysv-rc-conf (qui est de toute façon équivalent à ntsysv).
Par rapport à Ubuntu:
- Ubuntu est le créateur d'upstart et l'utilise donc complètement, sans aucune trace de sysvinit.
- Fedora (et son ancêtre RedHat) ont toujours utilisé sysvinit. Le passage à upstart est donc en ce moment en phase de transition. On voit toujours des traces de sysvinit, qui sont laissées simplement pour ne pas dérouter les habitués. Mais officiellement, c'est upstart qui est en contrôle. Il est possible de le désinstaller et de réinstaller sysvinit, mais je ne vois aucun intérêt à faire la manoeuvre. Les habitués de sysvinit s'y retrouveront aisément et la transition est facile. Elle apporte des nouvelles fonctionnalités, n'enlève rien et est simple à utiliser.
- Fedora implémente correctement les 7 runlevels: halte, mono-usager, multi-usagers texte sans NFS, multi-usagers texte, nul, graphique, redémarrage. Pour Ubuntu, les niveaux 2 à 4 étaient tous équivalents à 5.
- Fedora supporte par défaut la commande service, qui permet d'arrêter, démarrer, redémarrer ou obtenir l'état d'un service (stop, start, restart, status).
- Le service réseau s'appelle network (comme pas mal partout ailleurs), alors que sur Ubuntu il s'appelait networking.
Retour à la table des matières de la section
1.2 - KDE vs Gnome
Les différences entre KDE et Gnome sont évidemment cosmétiques. Ce sont deux systèmes X-Windows, fournissant une couche graphique à placer par-dessus Linux pour se simplifier la vie et rendre notre expérience agréable.
Il existe bien d'autres environnements de bureau, certains beaucoup plus légers que Gnome ou KDE. Toutefois, ce sont ces deux-là qui sont les plus populaires. Ils offrent une interface complète, tout un tas d'applications graphiques qui servent en gros d'interface entre nous et les fichiers de configuration texte de Linux et plusieurs fonctionnalités intéressantes.
Nous utiliserons KDE cette session-ci, simplement parce qu'on a utilisé Gnome la dernière fois. Si vous avez malencontreusement installé Gnome à la place de KDE (ce qui est le cas si vous avez tout laissé par défaut), ce n'est pas très difficile d'installer KDE. Ayant déjà probablement défini votre http_proxy (http_proxy=10.10.10.10:8080 - comment pouvez-vous faire pour rendre cette variable permanente d'une séance à l'autre?), vous n'avez qu'à utiliser yum (Yellowdog Updater Modified), le "nouveau" gestionnaire de paquetages de Fedora:
- Téléchargez le fichier kde.repo et placez-le dans /etc/yum.repos.d. Ceci ajoutera un nouveau dépôt de paquetages à la liste de yum: le dépôt de KDE pour Fedora.
- Faites yum groupinstall kde-desktop
- Dites oui quand on vous demandera si vous êtes d'accord, puis laissez le téléchargement et l'installation se terminer.
- Faites un yum update juste après pour vous assurer que vous avez bel et bien la dernière version de ces paquetages (et des autres au passage).
- Fermez votre session (pas besoin de redémarrer le serveur). Lorsque vous la réouvrirez, avant d'entrer votre mot de passe, vous pourrez choisir votre environnement de bureau à l'item "session" au bas de l'écran. Choisissez KDE.
Nous ne nous attarderons pas formellement sur KDE en classe - à vous de le découvrir en expérimentant.
Retour à la table des matières de la section